package com.zrrd.learn.chapter08面向对象.pattern.singleton.thread;

/**
 * 银行账户
 *
 * @author wrn
 * @version 1.0
 * @date 2023/8/2 14:33
 */

/**
 * 2、经典问题：我们创建一个银行账户类，其中有一个共享的balance变量表示账户余额。两个线程将同时进行存款和取款操作。？
 */
public class BankAccount {

    private static int balancd=0;
    private synchronized static void add(){
        balancd+=50;
    }
    private synchronized static void reduce(){
        balancd-=10;
    }

    public static void main(String[] args) {

        System.out.println("账户余额"+balancd);

        //就用哪一个
        Thread t1 = new Thread(()->{
            add();
        });

        Thread t2= new Thread(()->{
           if (balancd!=0){
               reduce();
           }
        });

        long s1 = System.currentTimeMillis();
        t1.start();
        t2.start();

        try{
            t1.join();
            t2.join();
        }catch (Exception e){
            System.out.println("出错了");
        }

        System.out.println("账户余额"+balancd);
        long s2 = System.currentTimeMillis();
        System.out.println("用时==>" + (s2-s1));
    }

}

